ICMPv6与NDP |
您所在的位置:网站首页 › icmpv6 ns报文 na报文 › ICMPv6与NDP |
1 ICMPv6 1.1 报文格式 ICMPv6协议号为58,即next header值为58,除了IPv4的作用外,还增加了邻居发现、无状态自动配置、PMTU等功能,报文格式如下: 0 7 15 31 Type Code Checksum Message Body Type:8bit,表明消息类型,0~127代表错误报文(即最高位为0),128~255代表消息报文(即最高位为1); Code:8bit,表明具体的原因; Checksum:16bit,校验和,验证报头完整性 Message Body:可变长,数据部分。 Typer类型表: Type Code 备注 1(目的不可达) 0 没有去往目的地的路由 1 与目的地的通信被管理员禁止 2 超出源地址范围 3 地址不可达 4 端口不可达 5 源地址在进出策略中拒绝 6 拒绝去目的地的路由 2(数据包过大) 0 此报文必须是路由器发送,用于响应数据包大于出接口MTU情况时不能被转发,此报文会携带本接口MTU发给源端,是PMTU发现的基础 3(超时) 0 超出TTL限制 1 分片重组超时 4(参数错误) 1 基本头或者扩展头有错误的字段 2 有不可识别的next header字段 3 扩展头中有未知的选项 128 0 Echo Request 129 0 Echo Reply 133 0 RS(router solicitation)消息 134 0 RA(router advertisement)消息 135 0 NS(Neighbor Solicitation)消息 136 0 NA(Neighbor Advertisement) 137 0 Redirect消息
1.2 RS消息 主机刚接入网络并配置为自动获取地址,主机需要自动获取前缀、前缀长度、默认网关等信息时就会发送RS(router solicitation )消息。 源IP为发送接口的Link Local地址或未指定,目的FF02::1(所有节点组播相当于广播)或FF02::2(所有路由器),路由器收到RS后立即回复RA。
Type=133 Code=0 Checksum Reserved Option… … Type:8bit,值为133 Code:8bit,值为0 Checksum:校验和,验证报头完整性 前3字段为正常的ICMPv6报头 Reserved:32bit,保留为0 Option:选项值,目前只定义了发送者的链路层地址(MAC),如果未指定则不包含该选项 1.3 RA消息 RA(router advertisement)消息由路由器周期性发送或者收到RS后立即发送,为主机提供前缀、前缀长度、默认网关等编址和配置信息,源IP为发出消息接口的Link Local地址,目的为FF02::1(所有节点) Type=134 Code=0 Checksum Cur Hop Limit M O Reserved Router Lifetime Reachable Time Retrans Timer Options… … Type:8bit,值134 Code:8bit,保留全0 Checksum:16bit,校验和 前3字段为ICMPv6报头 Cur Hop Limit:8bit,路由器建议采用无状态自动配置的主机在IP包里的跳数限制为该字段的值,0表示不推荐,由主机自行设置 M位:1bit,管理地址配置位,0表示使用无状态自动配置,1表示告诉主机使用DHCPv6来获取配置,当M位为1时O位无意义,因为所有参数都可以通过DHCPv6获取 O位:1bit,其他配置标志位,0表示DHCPv6服务器没有其他可用信息,1表示其他参数使用DHCPv6服务器获取,包括路由器生存时间、邻居可达时间、邻居重传时间、链路MTU、DNS等 如果M和O位都不设置(全0),表示无法通过DHCPv6获取配置信息 Reserved:6bit,保留 Router Lifetime:16bit,默认路由器关联生存时间,秒为单位,最大65535 华为确实1800s,表示主机把该路由器当作默认网关的有效时间,0表示主机不将该路由器作为默认网关,主机每次收到RA将刷新该计时器 Reachable Time:32bit,毫秒为单位,表示通告邻居可达时间,用作邻居不可达检测,0表示未指定 Retrans Timer:32bit,重传计时器,毫秒为单位,表示主机在主机重传邻居请求消息前等待时间,用作地址解释和邻居不可达检测,0表示未指定 RS和RA消息可完成无状态自动配置和路由器发现 1.4 NS消息 NS(Neighbor Solicitation)邻居请求消息用于完成类似IPv4的ARP解析功能,查找目标的链路层地址,源地址接口的Global地址,目标地址是被访问的地址所对应的被请求节点的组播地址,消息中包含源链路层地址(一般指MAC),NS还可以用来检测邻居可达性和地址冲突,在进行地址冲突检测时源地址为未指定地址(全0) Type=135 Code=0 Checksum Reserved Target Address Option… … Type:8bit,值135 Code:8bit,保留全0 Checksum:16bit,校验和 前3字段为ICMPv6报头 Reserved:32bit,保留 Target Address:128bit,目的IPv6地址,不能使用组播地址 Option:选项,发送者的链路层地址(一般指MAC),当源IP为未指定地址时不能有该选项,在有IPv6地址的链路层上,必须包含此选项,即发送源IP不是全0(接口上有IP) 1.5 NA消息 NA(Neighbor Advertisement)邻居通告消息) 1. 收到NS消息后回复NA消息,单播形式,源IP是NS的目的IP,目的IP是NS的源IP,如果收到的NS源为未指定IP,则目的IP为FF02:1(所有节点)。类似ARP响应; 2. 节点需快速传播新的信息(类似免费ARP),目的地址为FF02:1(所有节点) Type=136 Code=0 Checksum R S O Reserved Target Address Option… …
Type:8bit,值136 Code:8bit,保留全0 Checksum:16bit,校验和 前3字段为ICMPv6报头 R路由器(Router)位:1bit,路由器标记位,1表示该节点为路由器,在邻居不可达检测中检测路由器是否变为主机 S被请求(Solicited)位:1bit,请求标记位,1表示收到NS后回应的NA,S位在邻居不可达检测中用作可达性确认,在组播的NA(DAD)和主动发送的 NA 中,S 比特一定不能置 1 O重载(Override)位:1bit,替代标记位,1表示替代当前已缓存的IPv6地址的链路层地址,从而更新邻居缓存表项;0表示不更新,如果没有相应的链路层地址则添加新的表项 Reserved:29bit,保留 Target Address:128bit,如果是NS回应的NA消息,该字段为收到的NS消息中的Target Address,如果非响应的NA消息,该字段为链路层地址发生变化的IPv6地址 Option:选项,包含此NA消息发送者的链路层地址,回应组播NS的NA必须包含此选项,回应单播NS的NA可以不包含此选项,因为单播NS请求发送者有正确的链路层地址 1.6 Redirect消息 Redirect重定向消息用于通知主机去往目的有更优的下一跳,只对主机有效,对路由器无效,消息的源地址为发送接口的链路本地地址,目的地址是触发次重定向报文的源地址 Type=137 Code=0 Checksum Reserved Target Address Destination Address Options..
Type:8bit,值137 Code:8bit,保留全0 Checksum:16bit,校验和 前3字段为ICMPv6报头 Reserved:32bit,保留 Target Address:128bit,通知到主机的最优下一跳路由器,必须是下一跳路由器的link local地址,当目的地市邻居时,Target Address必须是Destination Address,否则重定向后的下一跳路由器地址 Destination Address:128bit,需要被重定向的目的地址 Option:重定向后使用的下一跳路由器的链路层地址 2 NDP NDP,Neighbor Discovery Protocol,邻居发现协议 l 对于主机,使用NDP发现相邻的路由器、自动配置地址、地址前缀即路由等。 l 对于路由器,公告路由器的相关参数、路由及链路的地址前缀。 l 对于节点,解析IPv6数据包将被转发到的邻居节点的链路层地址、获取邻接点的可达性、确定邻接点的链路层地址什么时候发生变化。 NDP用到的地址: Ø 未指定地址(::):表示发送者暂时无地址 Ø 链路本地地址:只在链路范围内的单播地址 Ø FF02::1(所有节点):到本链路范围的所有节点地址 Ø FF02::2(所有路由器):到本链路范围的所有路由器地址 Ø 被请求节点组播地址:一个IPv6接口会通过自动映射技术为自己的每个单播地址(包括链路本地地址)创建一个请求节点组播地址,由固定的FF02::1FF00:0/104和单播地址的最后24位组成 NDP依靠5种ICMPv6报文实现:RS、RA、NS、NA、Redirect 2.1 无状态自动配置 1. PC接入网络发出RS消息(Type 133的ICMPv6),想路由器进行请求,目标地址FF02::2 2. 路由器回应RA,该消息包括PC所需要的前缀、前缀长度等,目的地址FF02::1 3. PC收到RA后,使用消息中的前缀和前缀长度等完成自动配置,并将RA中宣告的链路本地地址添加到默认路由器列表作为默认网关 4. 使用该地址前会进行DAD(重复地址检测)
2.2 路由器发现 局域网中的路由器会定期发送RA报文,目的为所有节点FF02::1,为主机提供网络配置信息,如网中有多台路由器,则会根据优先级(Router Preference)选择默认路由器,优先级使用的是M和O位后的保留字段。 另外RA消息中还有两个有效期:优选生存期(Preferred Llifetime)和有效生存期(Valid Lifetime),主机以无状态自动配置拿到的地址进行DAD后并且无冲突视为优选地址 1. 优选生存期就是指优选地址的时间,主机通过优选地址与其他设备通信,优选生存期到期,将不再使用该地址新建链接 2. 有效生存期是指主机收到RA消息前缀可以使用的时间,必须大于优选生存期,优选生存期到期后有效生存期到期前已建立的链接可以用,直到有效生存期到期
2.3 地址解析 使用NS和NA完成链路层地址解析,类型IPv4的ARP。 当PC1访问PC2,PC1不知道PC2的链路层地址,这时候发送NS消息请求PC2的链路层地址。步骤如下: 1. PC1发送NS消息(Type135的IMCPv6),IPv6报文的目标地址PC2的接口IPv6单播地址转换后的被请求节点组播地址,ICMPv6的Target Address是PC2的IP,为什么目的地址是被请求节点组播地址?(RFC 2461和RFC4861) 2. PC2收到NS后,识别目标地址是自己接口的请求组播地址,并检查Target Address是自己的IP,单播方式回应NA,该消息包含PC2的MAC地址同时PC2将PC1的IPv6和MAC添加到邻居缓存表。 3. PC1收到PC2的NA后PC1将PC2的IPv6和MAC添加到本地邻居缓存表 2.4 DAD(重复地址检测) Duplicate Address Detect 一个接口配置IPv6单播地址,无论是链路本地地址或全局单播地址,手动配置或无状态获取或DHCPv6获取,使用前都必须进行DAD。步骤如下: 1. 比如PC1配置了IPv6地址2001::1,进行DAD前该地址称为试验(tentative)地址 2. PC1发出NS确定是否其他设备在使用该IP,IPv6报文的目的IP是2001::1的请求组播地址FF02::1:FF00:1,ICMPv6的Target Address是2001::1 3. 如果PC2的IPv6地址也是2001::1,那么PC2收到NS后会回应NA,告诉PC1该地址正在使用,否则不回应 4. PC1在发送NS后会设定定时器,如果定时器超时后没有收到NA,说明该地址可以使用,切换到已分配(assigned)状态 2.5 NUD(邻居不可达检测) Neighbor Unreachability Detection 与IPv4的ARP缓存表类似,NDP会将已发现的邻居信息存入邻居缓存表,包括IPv6地址和二层地址(一般指MAC),NDP会维护邻居缓存表会通过NS消息定期跟踪邻居状态,RFC4861定义了5种邻居状态,NUD利用这些状态和状态间的切换来检测和解析邻居的可达性 Ø Incomplete(未完成状态):表示解析还在进行,本机已发出NS,还未收到NA Ø Reachable(可达状态):本机已收到对方的NA,获得对端的链路层地址 Ø Stale(过期状态):邻居可达时间超时,表示未知是否可达。或者收到了邻居的非请求NA,携带的链路层地址和本地表项的地址不一致,该邻居立即变为Stale Ø Delay(延迟状态):Delay不是一个稳定的状态,而是一个延时等待状态,当向Stale状态的邻居发送报文时,该邻居变为Delay状态,并发送NS消息 Ø Probe(探测状态):节点向处于Probe状态的邻居持续发送单播NS报文,如持续收不到NA回应,将删除表项,如收到NA,邻居变为Reachable Ø Empty(空闲状态):表示节点上没有相关邻居缓存表项 邻居状态跟踪与地址解析的区别 地址解析的NS目的是被请求节点组播地址,而邻居状态跟踪的NS目的是单播 邻居状态跟踪的NA消息中S位必须置位,表示是可达性确认 2.6 重定向原理 路由器发送重定向消息需要满足一下规则 1. 检查收到的数据包源地址,必须是本设备的邻居表中的邻居; 2. 目的下一跳接口等于收到数据包的接口; 3. 数据包的目的不是一个组播地址。 主机接受到的重定向消息必须满足以下条件,否则丢弃: 1. 报文的源地址必须是link local地址,路由器必须使用link local地址作为RA消息已经重定向消息的源地址,以便主机唯一识别路由器 2. Hop Limit字段必须等于255,报文不可能被路由器转发; 3. ICMP校验和有效 4. ICMP Code为0 5. ICMP报文的长度为40Byte或以上 6. 所包含的选项长度必须大于0 3 实验测试https://blog.51cto.com/xxy12345/2510376
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |